package edu.controller;

import edu.service.CourseTypeService;
import edu.vo.CourseType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Optional;

@RestController
@RequestMapping("/course-types")
public class CourseTypeController {

    @Autowired
    private CourseTypeService courseTypeService;

    /**
     * 保存课程类型信息
     * @param courseType 课程类型对象
     * @return 保存后的课程类型对象
     */
    @PostMapping
    public ResponseEntity<CourseType> saveCourseType(@RequestBody CourseType courseType) {
        CourseType savedCourseType = courseTypeService.saveCourseType(courseType);
        return new ResponseEntity<>(savedCourseType, HttpStatus.CREATED);
    }

    /**
     * 根据ID获取课程类型信息
     * @param id 课程类型ID
     * @return 课程类型对象
     */
    @GetMapping("/{id}")
    public ResponseEntity<CourseType> getCourseTypeById(@PathVariable Integer id) {
        Optional<CourseType> courseTypeOptional = courseTypeService.getCourseTypeById(id);
        return courseTypeOptional.map(courseType -> new ResponseEntity<>(courseType, HttpStatus.OK))
                .orElseGet(() -> new ResponseEntity<>(HttpStatus.NOT_FOUND));
    }

    /**
     * 获取所有课程类型信息
     * @return 课程类型列表
     */
    @GetMapping
    public ResponseEntity<List<CourseType>> getAllCourseTypes() {
        List<CourseType> courseTypes = courseTypeService.getAllCourseTypes();
        return new ResponseEntity<>(courseTypes, HttpStatus.OK);
    }

    /**
     * 根据ID删除课程类型信息
     * @param id 课程类型ID
     * @return 无返回内容
     */
    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteCourseTypeById(@PathVariable Integer id) {
        courseTypeService.deleteCourseTypeById(id);
        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
    }

    /**
     * 更新课程类型信息
     * @param id 课程类型ID
     * @param courseType 新的课程类型信息
     * @return 更新后的课程类型对象
     */
    @PutMapping("/{id}")
    public ResponseEntity<CourseType> updateCourseType(@PathVariable Integer id, @RequestBody CourseType courseType) {
        CourseType updatedCourseType = courseTypeService.updateCourseType(id, courseType);
        return updatedCourseType != null ? new ResponseEntity<>(updatedCourseType, HttpStatus.OK)
                : new ResponseEntity<>(HttpStatus.NOT_FOUND);
    }
}